/*
 * ClientClass.h
 *
 *	一个客户端到到信息集合。
 *	包括：
 *		socket句柄
 *		读入数据缓存池
 *		写出数据缓存池
 *		用户数据
 *
 *  Created on: 2014-1-7
 *      Author: root
 */

#ifndef CLIENTCLASS_H_
#define CLIENTCLASS_H_

#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h>
#include <ctime>
#include "UserInfo.h"
#include "../logic/UserLogicController.h"
#include "Configs.h"
#include <vector>

namespace miniGameServer {

class ClientClass {
public:
	ClientClass();
	virtual ~ClientClass();

	int fd;
	struct sockaddr_in clientAddr;

	int lockRead();
	int unlockRead();
	/**
	 * 网络线程会将数据放入这个buff。
	 */
	std::vector<unsigned char> readBuff;

	int lockWrite();
	int unlockWrite();
	/*
	 * 网络线程将从这个buff里区数据发送给客户端
	 */
	std::vector<unsigned char> writeBuff;


	miniGameServer::UserInfo user;

	miniGameServer::UserLogicController controller;

	//已经在读队列
	bool inReadQueue;
	//已经在写队列
	bool inWriteQueue;

	//测试此用户是否超时，超时则提掉用户.参数是当前的时间
	bool canTick(time_t ctime);

	void setPackTime(time_t tim)
	{
		lastPackTime = tim;
	}
private:
	pthread_mutex_t readMutex;

	pthread_mutex_t writeMutex;

	//上一次收到包到时间，过期就提掉用户，关闭链接
	time_t lastPackTime;
};

}

#endif /* CLIENTCLASS_H_ */
